[Bug]: 请问如何正确的关闭go 您所在的位置:网站首页 open images怎么关 [Bug]: 请问如何正确的关闭go

[Bug]: 请问如何正确的关闭go

2024-03-16 23:51| 来源: 网络整理| 查看: 265

请确保您已阅读以上注意事项,并勾选下方的确认框。 我已经仔细阅读上述教程和 "提问前需知" 我已经使用 dev分支版本 测试过,问题依旧存在。 我已经在 Issue Tracker 中找过我要提出的问题,没有找到相同问题的ISSUE。 我已知晓并同意,此处仅用于汇报程序中存在的问题。若这个 Issue 是关于其他非程序本身问题,则我的 Issue 可能会被无条件自动关闭或/并锁定。(这些问题应当在 Discussion 板块提出。) go-cqhttp 版本

1.0rc1

运行环境

Windows (64)

运行架构

AMD64

连接方式

WebSocket (正向)

使用协议

1 | Android Phone

重现步骤

两个办法均可以触发:

流程A:使用引导进程启动go-cqhttp,等待登录完成后,结束进程,并稍后再次启动(引导进程不退出)。

流程B:使用引导进程启动go-cqhttp,等待登录完成后,结束进程。此时再关闭引导进程重开,走登录环节前此问题复现。

期望的结果是什么?

正常完成进程被关闭 -> 重启的过程。

实际的结果是什么?

1.0rc1版本: [2022-03-16 01:26:35] [FATAL]: 打开数据库失败: open backend error: open leveldb error: The process cannot access the file because it is being used by another process.

dev版本: [2022-03-16 01:30:09] [FATAL]: open image cache failed: 文件被其他进程占用

补充: 我的判断是leveldb打开失败,直接原因就是上次进程没有能够正常退出。因此我设想的修补方案是给gocqhttp发中断的指令。 但是,golang的process模块明确说明“Sending Interrupt on Windows is not implemented.” gocqhttp手册中也没有找到如何命令gocqhttp退出的说明。

简单的复现代码/链接(可选) 代码大致如此: "github.com/fy0/procs" // 引用这个包,原版包缺依赖 func run() { p := procs.NewProcess(gocqhttpExePath + " faststart") p.Dir = workDir p.Run() return p } p := run() p.Stop() run() // stop内部使用golang内置的process包的Kill // Stop tries to stop the process. func (p *Process) Stop() error { for _, cmd := range p.Cmds { // ProcessState means it is already exited. if cmd.ProcessState != nil { continue } err := cmd.Process.Kill() if err != nil { return err } } return nil } ### 日志记录(可选) _No response_ ### 补充说明(可选) _No response_


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有